/**
 * Created whit IntelliJ IDEA.
 * Description：
 * User：ZHONGCHEN
 * Date:2022-04-11
 * Time:23:17
 */
public class TestDemo {
    //357. 统计各位数字都不同的数字个数
//    对于 n = 0 的情况较为特殊，特判一下，返回 1。
//    对于其他情况，由于不能含有前导 0，最高位可选择的数值个数为 9，
//    而从次高位开始到最低位，可选的个数从 9 开始逐一递减。
    // 当n != 0时,第一位能取 1~9 一共九种取法;(次高位)第二位能取 (0~9 - 第一位的数)一共9种取法
    //第三位能取 0~9减去第一位第二位一共8种取法;以此类推

//    利用乘法原理，每位数可选的数值个数相乘即是长度为 n 的数的可能方案数 cur，
//    而所有长度 [1, n] 的方案数累加即是答案。
//
    public int countNumbersWithUniqueDigits(int n) {
        if (n == 0) {
            return 1;
        }
        int ans = 10;
        for (int i = 2, last = 9; i <= n; i++) {
            int num = last * (10 - i + 1);
            ans += num;
            last = num;
        }
        return ans;
    }
}
